import type { ExtensibleEntityDto, ExtensibleObject } from '@abp/ng.core';
import type { OperatorDto } from '../staff/models';

export interface CustomerCreateDto extends CustomerCreateOrUpdateBase {
}

export interface CustomerCreateOrUpdateBase extends ExtensibleObject {
  tenantId?: string;
  customerTypeId?: string;
  name?: string;
  shortName?: string;
  contact?: string;
  phone?: string;
  address?: string;
  operatorId?: string;
  enabled: boolean;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
}

export interface CustomerDto extends ExtensibleEntityDto<string> {
  tenantId?: string;
  customerTypeId?: string;
  customerType: CustomerTypeDto;
  name?: string;
  shortName?: string;
  contact?: string;
  phone?: string;
  address?: string;
  operatorId?: string;
  operator: OperatorDto;
  enabled: boolean;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
  concurrencyStamp?: string;
}

export interface CustomerTypeCreateDto extends CustomerTypeCreateOrUpdateBase {
}

export interface CustomerTypeCreateOrUpdateBase extends ExtensibleObject {
  tenantId?: string;
  level: number;
  parentId?: string;
  displayName?: string;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
}

export interface CustomerTypeDto extends ExtensibleEntityDto<string> {
  tenantId?: string;
  level: number;
  parentId?: string;
  displayName?: string;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
  concurrencyStamp?: string;
}

export interface CustomerTypeUpdateDto extends CustomerTypeCreateOrUpdateBase {
  concurrencyStamp?: string;
}

export interface CustomerUpdateDto extends CustomerCreateOrUpdateBase {
  concurrencyStamp?: string;
}
